package org.example.service;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
public class TokenService {
   // @Value("${security.key}")
    String key = "SuccessisnotfinalfailureisnotfatalItisthecouragetocontinuethatcounts";
    //@Value("${expire.date}")
    long expireDate = 864_000_000;
    public String generateToken(String name, List<String> authorities) {              //生成令牌
        return Jwts.builder()
                .setSubject(name)           // 用户名（JWT主题）
                .claim("authorities",authorities)          // 权限列表（自定义声明）
                .setIssuedAt(new Date())                   // 签发时间
                .setExpiration(new Date(System.currentTimeMillis() + expireDate))    // 过期时间
                .signWith(SignatureAlgorithm.HS256,key)             // HS256算法 + 密钥签名
                .compact();                                        // 生成JWT字符串
    }

    public Claims validateToken(String token){          //验证JWT
        try {
            return Jwts.parserBuilder()
                    .setSigningKey(key)             //：使用密钥 key 验证 JWT 的签名，确保 Token 未被篡改。
                    .build().parseClaimsJws(token)   //自动验证 Token 的过期时间（exp）、生效时间（nbf）等声明。
                    .getBody();
        }catch (RuntimeException e){
            e.printStackTrace();
            return null;
        }
    }
}
